//请实现一个函数，把字符串 s 中的每个空格替换成"%20"。 
//
// 
//
// 示例 1： 
//
// 输入：s = "We are happy."
//输出："We%20are%20happy." 
//
// 
//
// 限制： 
//
// 0 <= s 的长度 <= 10000 
// Related Topics 字符串 👍 199 👎 0

package com.cute.leetcode.editor.cn;
public class TiHuanKongGeLcof {
    public static void main(String[] args) {
        Solution solution = new TiHuanKongGeLcof().new Solution();
    }
    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        /**
         * Java直接使用库函数即可 s.replaceAll(" ", "%20")
         * 也可以使用StringBuilder字符串拼接的方式
         */
        public String replaceSpace1(String s) {
            char[] chars = s.toCharArray();
            StringBuilder res = new StringBuilder();
            for (char c : chars){
                if (c == ' ') res.append("%20");
                else res.append(c);
            }
            return res.toString();
        }

        /**
         * 剑指Offer中提供的移动字符的方法
         * 首先遍历原始字符串中空格的个数，新字符串的长度为原始字符串 + 2 * 空格个数，然后两个字符串从后向前遍历
         * 遍历过程中不是空格就直接拷贝，是空格的话就在新串中进行添加
         * 这样比StringBuilder内存占用高一些？
         */
        public String replaceSpace(String s) {
            char[] chars = s.toCharArray();
            int count = 0;
            for (char c : chars) if (c == ' ') count++;
            char[] res = new char[chars.length + 2 * count];
            //TODO 切记，需要搬移时可以考虑从后向前遍历，会减少移动次数
            for (int i = chars.length-1, j = res.length-1; i >= 0 && j >=0; i--, j--) {
                if (chars[i] == ' '){
                    res[j--] = '0';
                    res[j--] = '2';
                    res[j] = '%';
                }else res[j] = chars[i];
            }
            return new String(res);
        }
    }
//leetcode submit region end(Prohibit modification and deletion)

}